// ==UserScript==
// @name        课改网助手 - e21.cn
// @namespace   Violentmonkey Scripts
// @match       *://*.e21.cn/*
// @grant       GM_xmlhttpRequest
// @grant       GM_registerMenuCommand
// @grant       GM_unregisterMenuCommand
// @grant       GM_setValue
// @grant       GM_getValue
// @version     1.0
// @author      -
// @require https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js
// @require https://cdn.jsdelivr.net/npm/tesseract.js@4/dist/tesseract.min.js
// @description 2023/4/27 10:15:17
// ==/UserScript==

var AutoLoginCheck = !GM_getValue('AutoLoginCheck'), AutoLoginMenu

(function () {
  'use strict';

  $.ajaxSetup({beforeSend: function(xhr) {
      xhr.overrideMimeType("text/csv;charset=gb2312");
  }})

  // 课改网搜索页面扩展
  var href, teacherId, obtr
  GM_registerMenuCommand("一键重置密码", repassword, 'r')

  if ($('body > table:nth-child(3) > tbody > tr > td:nth-child(2) > table > tbody > tr > td > table:nth-child(2) > tbody > tr:nth-child(1) > td > table > tbody > tr > td:nth-child(1) > b').text() === "查找结果") {

    $('tr[align=center]').children(":first").next().children(":first").text('教师id')
    $('tr[align=center]').children(":first").next().next().children(":first").text('教师信息')

    $('tr[align=center]').not(':first').each(function () {
      obtr = $(this)
      href = obtr.children(":first").children().attr("href")
      teacherId = href.substring(href.length - 6)

      obtr.children(":first").next().text(teacherId)
      obtr.children(":first").next().next().attr('align', 'left')
      obtr.children(":first").next().next().next().attr('align', 'left')
      obtr.children(":first").next().next().attr('id', 'Bh' + teacherId)

      $.get("/show_teacher_info.php?teacher_id=" + teacherId, function (data, status, xhr) {

        var id, teacherInfo, Infohtml

        id = this.url.substring(this.url.length - 6)

        teacherInfo = /教师编号[\s\S]+?align="left">(.+?)<[\s\S]+?身份证号[\s\S]+?align="left">(.+?)<[\s\S]+?是否是班主任[\s\S]+?align="left">([\s\S]+?)<[\s\S]+?(任教班级)[\s\S]+?align="left">([\s\S]+?)</g.exec(data)

        teacherInfo = teacherInfo.slice(1)

        Infohtml = '<b>' + teacherInfo[3] + '</b> > ' + teacherInfo[4].replace(/高中\d+级|[\s\r\n]/g,'') + '<br>'
        Infohtml = Infohtml + '<b>身份证号</b> > ' + teacherInfo[1] + '<br>'
        Infohtml = Infohtml + '<b>教师编号</b> > ' + teacherInfo[0] + '<br>'

        $('#Bh' + id).html(Infohtml)
        $('#Bh' + id).next().html(teacherInfo[2].replace(/高中\d+级|[\s\r\n]/g,''))
      })

    })

  }

  // 登录页面功能扩展
  if (window.location.href.indexOf('login') > 0) {
    AutoLogin() // 初次进入页面，加载菜单项

    // Ctrl + v 自动填写账号密码
    window.onkeydown = function (event) {
      if (event.ctrlKey && event.keyCode === 86) {
        // 42120100001020200017	cceb0a1ab9d9
        navigator.clipboard.readText().then(function (clipText) {
          var user
          user = clipText.replace(/[\r\n]/g, "").split('\t')
          document.querySelector("#UserName").value = user[0]
          document.querySelector("#UserPwd").value = user[1]

          // 验证码识别
          var base64 = getBase64Image(document.querySelector("#loginForm > div.infobox > div:nth-child(3) > div > img"));
          var file = dataURLtoBlob(base64); // 获取 img 标签中的图片二进制数据
          Tesseract.recognize(
            file, 'gle', //{ logger: m => console.log(m) }
          ).then(({ data: { text } }) => {
            document.querySelector("#userYzm").value = text.slice(0, 4)

            // 菜单自动登录被选择时，自动点击登录按钮
            if(AutoLoginCheck){
              document.querySelector("#loginForm > div.dlbox > input.sumbit").click()
            }
          })

        })
      }
    }
  }

  // 一键重置当前页密码
  function repassword() {
    $('tr[align=center]').not(':first').each(function () {
      obtr = $(this)
      href = obtr.children(":first").children().attr("href")
      teacherId = href.substring(href.length - 6)
      $.post("initPassWord.php", { 'ti_user_id': teacherId }, function (data, status) {
        var id, oldtext
        id = this.data.substring(this.data.length - 6)
        oldtext = $('#Bh' + id).html()
        console.log(oldtext, data, oldtext.indexOf(data));
        if (oldtext.indexOf(data) === -1) {
          $('#Bh' + id).html(oldtext + "<b>&#12288;&#12288;密码</b> > " + data)
        }
      })

    })
  }

  // 综合素质评价委员会意见
  if ($("body > div.g-content.clearfix > div.g-table.f-fl > div.m-breakNav").text().trim() === "委员会意见") {
    GM_registerMenuCommand("一键提交意见", sendjycomtent, 'r')
  }

  // 综合素质评价委员会意见
  function sendjycomtent(StuId) {
    var hrefs, troot
    $('#form2 > table > tbody > tr').each(function () {
      var CONTENT = [
        '该生在高中学习生涯中，服从学校管理，思想上进。自觉遵守法律法规、学校规章和班规班纪，尊敬师长，团结同学，积极参加社会实践活动、研学旅行和文体活动，学习目的明确，态度端正，圆满完成高中学业，是一名合格的高中毕业生。',
        '该生高中阶段表现良好，综合素质优秀，希望以后继续努力，做奋斗者，做追梦人，不负韶华。',
        '该生在本校修业期满，经考核:学时达标，身体健康，综合素质评价合格，准予毕业。'
      ]
      troot = $(this)
      hrefs = troot.children().eq(-1).children().attr('href')
      if(hrefs){
        StuId = hrefs.substring(hrefs.length - 20)

        $.post(
          'https://zhsz.e21.cn/2016/Controllers/CommentController.php', 
          {'CONTENT': CONTENT[randInt(0,2)], 'm': 'editCommentByXJSBM', 'FLAG': 'ok', 'XJSBM_TO': StuId},
          function (data, status) {
            console.log(data)
          })
      }

    })

    location.reload()
  }
  
})();

// 自动登录菜单状态处理
function AutoLogin(){
  if(AutoLoginCheck){
    AutoLoginCheck = false
    GM_unregisterMenuCommand(AutoLoginMenu)
    AutoLoginMenu = GM_registerMenuCommand('❎ 自动登录', AutoLogin, 'c')
  }else{
    GM_unregisterMenuCommand(AutoLoginMenu)
    AutoLoginCheck = true
    AutoLoginMenu = GM_registerMenuCommand('✅ 自动登录', AutoLogin, 'c')
  }
  GM_setValue('AutoLoginCheck', AutoLoginCheck)
}

/**
 * 图像转Base64
 */
function getBase64Image(img) {
  var canvas = document.createElement("canvas");
  canvas.width = img.width;
  canvas.height = img.height;
  var ctx = canvas.getContext("2d");
  ctx.drawImage(img, 0, 0, img.width, img.height);
  var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
  var dataURL = canvas.toDataURL("image/" + ext);
  return dataURL;
}

/**
*Base64字符串转二进制
*/
function dataURLtoBlob(dataurl) {
  var arr = dataurl.split(','),
      mime = arr[0].match(/:(.*?);/)[1],
      bstr = atob(arr[1]),
      n = bstr.length,
      u8arr = new Uint8Array(n);
  while (n--) {
      u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], {
      type: mime
  });
}

// 取随机整数
function randInt(m,n){
  return parseInt(Math.random()*(n - m +1)+m);
}